From 55a27fdc946457947031ff5579c40b43e0b9a23a Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Thu, 3 May 2018 11:17:38 +0200 Subject: [PATCH] Pass full build_config to generate_targets() --- src/cargo/ops/cargo_compile.rs | 39 +++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 161d05a7b..3d78a3d75 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -287,9 +287,8 @@ pub fn compile_ws<'a>( &to_builds, filter, default_arch_kind, - mode, &resolve_with_overrides, - release, + &build_config, )?; if let Some(args) = extra_args { @@ -460,15 +459,14 @@ fn generate_targets<'a>( packages: &[&'a Package], filter: &CompileFilter, default_arch_kind: Kind, - mode: CompileMode, resolve: &Resolve, - release: bool, + build_config: &BuildConfig, ) -> CargoResult>> { let mut units = Vec::new(); // Helper for creating a Unit struct. let new_unit = |pkg: &'a Package, target: &'a Target, target_mode: CompileMode| { - let profile_for = if mode.is_any_test() { + let profile_for = if build_config.mode.is_any_test() { // NOTE: The ProfileFor here is subtle. If you have a profile // with `panic` set, the `panic` flag is cleared for // tests/benchmarks and their dependencies. If we left this @@ -519,7 +517,7 @@ fn generate_targets<'a>( ws.is_member(pkg), profile_for, target_mode, - release, + build_config.release, ); // Once the profile has been selected for benchmarks, we don't need to // distinguish between benches and tests. Switching the mode allows @@ -555,12 +553,17 @@ fn generate_targets<'a>( CompileFilter::Default { required_features_filterable, } => { - let default_units = generate_default_targets(pkg.targets(), mode) + let default_units = generate_default_targets(pkg.targets(), build_config.mode) .iter() - .map(|t| (new_unit(pkg, t, mode), !required_features_filterable)) + .map(|t| { + ( + new_unit(pkg, t, build_config.mode), + !required_features_filterable, + ) + }) .collect::>(); proposals.extend(default_units); - if mode == CompileMode::Test { + if build_config.mode == CompileMode::Test { // Include the lib as it will be required for doctests. if let Some(t) = pkg.targets().iter().find(|t| t.is_lib() && t.doctested()) { proposals.push((new_unit(pkg, t, CompileMode::Build), false)); @@ -577,7 +580,7 @@ fn generate_targets<'a>( } => { if lib { if let Some(target) = pkg.targets().iter().find(|t| t.is_lib()) { - proposals.push((new_unit(pkg, target, mode), false)); + proposals.push((new_unit(pkg, target, build_config.mode), false)); } else if !all_targets { bail!("no library targets found") } @@ -588,10 +591,10 @@ fn generate_targets<'a>( FilterRule::All => Target::tested, FilterRule::Just(_) => Target::is_test, }; - let test_mode = match mode { + let test_mode = match build_config.mode { CompileMode::Build => CompileMode::Test, CompileMode::Check { .. } => CompileMode::Check { test: true }, - _ => mode, + _ => build_config.mode, }; // If --benches was specified, add all targets that would be // generated by `cargo bench`. @@ -599,20 +602,22 @@ fn generate_targets<'a>( FilterRule::All => Target::benched, FilterRule::Just(_) => Target::is_bench, }; - let bench_mode = match mode { + let bench_mode = match build_config.mode { CompileMode::Build => CompileMode::Bench, CompileMode::Check { .. } => CompileMode::Check { test: true }, - _ => mode, + _ => build_config.mode, }; proposals.extend( list_rule_targets(pkg, bins, "bin", Target::is_bin)? .into_iter() - .map(|(t, required)| (new_unit(pkg, t, mode), required)) + .map(|(t, required)| (new_unit(pkg, t, build_config.mode), required)) .chain( list_rule_targets(pkg, examples, "example", Target::is_example)? .into_iter() - .map(|(t, required)| (new_unit(pkg, t, mode), required)), + .map(|(t, required)| { + (new_unit(pkg, t, build_config.mode), required) + }), ) .chain( list_rule_targets(pkg, tests, "test", test_filter)? @@ -631,7 +636,7 @@ fn generate_targets<'a>( // If any integration tests/benches are being run, make sure that // binaries are built as well. - if !mode.is_check() && proposals.iter().any(|&(ref unit, _)| { + if !build_config.mode.is_check() && proposals.iter().any(|&(ref unit, _)| { unit.mode.is_any_test() && (unit.target.is_test() || unit.target.is_bench()) }) { proposals.extend( -- 2.30.2